/*
    Speedbump aka Project Kimbula
    Copyright (C) 2010  Ping Shin Ching

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see http://www.gnu.org/licenses.

	Ping Shin Ching
	righteous.ninja@gmail.com OR ping_sc@hotmail.com
	More information at http://www.tidytutorials.com/p/speedbump.html
 */



#ifndef cpipes_h
#define cpipes_h

#include "application.h"
#include "xsocket.h"
#include "rules.h"
#include <sys/types.h>

#define COMMREADCHAR_SIZE	2048	

typedef struct{
	int pipes[2];
	short used;
	//char ip[SP_SOCKADDRESS_LENGTH];
	ipaddress ip;
	pthread_t thread_id;
}PIPES;

typedef void(*cleanup_function)(PIPES*);

class IPCommunicationPipes{
	FilterChain* filterChain;
	PIPES* pipes;
	int commpipes_maxfd;
	int commpipes_total;
	void pipeFinished(PIPES*);
	void reapZombiePipes();
	cleanup_function cleanup;	


public:
	IPCommunicationPipes(int, FilterChain*, cleanup_function);
	~IPCommunicationPipes();
	int PrepareForRead(fd_set* , fd_set*);
	int GetFreePipes();
	int ReadFromThePipes(fd_set*, fd_set*);
	int GetMaxFd();
	void SignalThreads(int);
	PIPES* GetPipe(fd_set*, const ipaddress*);

};

#endif
